unit URotinaLancamentosDisque;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, URotinasBase, ComCtrls, StdCtrls, Buttons, ExtCtrls, ToolEdit,
  DB, DBCtrls, Mask, DBTables;

type
  TFRotinaLancamentosDisque = class(TFRotinasBase)
    Label2: TLabel;
    edCaminhoNome: TComboEdit;
    RGIndicacao: TRadioGroup;
    GBEmpresa: TGroupBox;
    DBLEmpresa: TDBLookupComboBox;
    DsEmpresa: TDataSource;
    GroupBox1: TGroupBox;
    edDataIni: TDateEdit;
    edDataFim: TDateEdit;
    QPesquisa: TQuery;
    SaveDialog: TSaveDialog;
    procedure BtnExecClick(Sender: TObject);
    procedure DBLEmpresaKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure edCaminhoNomeButtonClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FRotinaLancamentosDisque: TFRotinaLancamentosDisque;

implementation

uses UGeral;

{$R *.dfm}

procedure TFRotinaLancamentosDisque.BtnExecClick(Sender: TObject);
CONST SQL =
            'SELECT'#10+
            'LANCAMENTO.LANC_CPCR,'#10+
            'LANCAMENTO.LANC_DATA,'#10+
            'CONTACORRENTE.COD_BANCO_CAM_COM,'#10+
            'CONTACORRENTE.NUMERO_AGENCIA,'#10+
            'CONTACORRENTE.NUMERO_CONTA,'#10+
            'CONTACORRENTE.CONT_CORR_DESCRICAO,'#10+
            '    (SELECT CLIENTE.CLI_CPFCNPJ FROM'#10+
            '    CONTASRECEBER'#10+
            '    INNER JOIN CLIENTE ON (CLIENTE.CLI_CODIGO = CONTASRECEBER.CR_CLIENTE)'#10+
            '    WHERE'#10+
            '    CONTASRECEBER.CR_CODIGO = LANCAMENTO.LANC_TITULO) AS CPFCNPJ_CLIENTE,'#10+   // CPFCNPJ_CLIENTE
            '      '#10+
            '    (SELECT CLIENTE.CLI_RAZAO FROM'#10+
            '    CONTASRECEBER'#10+
            '    INNER JOIN CLIENTE ON (CLIENTE.CLI_CODIGO = CONTASRECEBER.CR_CLIENTE)'#10+
            '    WHERE'#10+
            '    CONTASRECEBER.CR_CODIGO = LANCAMENTO.LANC_TITULO) AS RAZAO_CLIENTE,'#10+  // RAZAO_CLIENTE
            '      '#10+
            '    (SELECT FORNECEDOR.FORN_CPFCNPJ FROM'#10+
            '    CONTASPAGAR'#10+
            '    INNER JOIN FORNECEDOR ON (FORNECEDOR.FORN_CODIGO = CONTASPAGAR.CP_FORNECEDOR)'#10+
            '    WHERE'#10+
            '    CONTASPAGAR.CP_CODIGO = LANCAMENTO.LANC_TITULO) AS CNPJ_FORNECEDOR,'#10+  // CNPJ_FORNECEDOR
            '       '#10+
            '        (SELECT FORNECEDOR.FORN_RAZAO FROM'#10+
            '    CONTASPAGAR'#10+
            '    INNER JOIN FORNECEDOR ON (FORNECEDOR.FORN_CODIGO = CONTASPAGAR.CP_FORNECEDOR)'#10+
            '    WHERE'#10+
            '    CONTASPAGAR.CP_CODIGO = LANCAMENTO.LANC_TITULO) AS RAZAO_FORNECEDOR,'#10+ // RAZAO_FORNECEDOR
            '     '#10+
            'LANCAMENTO.LANC_VALORFINAL,'#10+
            'LANCAMENTO.LANC_JUROSMULTA,'#10+
            'LANCAMENTO.LANC_TITULO,'#10+
            'LANCAMENTO.LANC_CHEQUE,'#10+
            'PLANOCONTAS.DESCRICAO,'#10+
            'LANCAMENTO.CODIGOEMPRESA,'#10+
            'CONTASRECEBER.CR_DOCUMENTO,'#10+
            'CONTASPAGAR.CP_DOCUMENTO '#10+
            '   '#10+
            'FROM'#10+
            '    LANCAMENTO'#10+
            ' INNER JOIN CONTACORRENTE ON (CONTACORRENTE.CONT_CORR_CODIGO = LANCAMENTO.LANC_CONTA)'#10+
            ' INNER JOIN PLANOCONTAS ON (LANCAMENTO.LANC_PLANO = PLANOCONTAS.CODIGO)'#10+
            ' LEFT JOIN CONTASPAGAR ON (CONTASPAGAR.CP_CODIGO = LANCAMENTO.LANC_TITULO) '#10+
            ' LEFT JOIN CONTASRECEBER ON (CONTASRECEBER.CR_CODIGO = LANCAMENTO.LANC_TITULO)'#10+
            'WHERE'#10+
            '(LANCAMENTO.EXCLUIDO <> ''S'' OR LANCAMENTO.EXCLUIDO IS NULL)';
            
var filtro : string;
pos_1,pos_2,pos_3,pos_4,pos_5,pos_6,pos_7,pos_8,pos_9,pos_10,pos_11,pos_12,pos_13: string;
arq : TarqTXT;
begin

  if DBLEmpresa.KeyValue = Null then
  begin

    ShowMessage('A empresa precisa ser informado...');
    DBLEmpresa.SetFocus;
    Exit;

  end;

  if edDataIni.Date = 0 then
  begin

    ShowMessage('A data inicial deve ser informada!');
    edDataIni.Setfocus;
    Exit;

  end;

  if edDataFim.Date = 0 then
  begin

    ShowMessage('A data final deve ser informada!');
    edDataFim.Setfocus;
    Exit;

  end;

  if edcaminhonome.Text = '' then
  begin

    ShowMessage('Informe o caminho e o nome do arquivo a ser gerado!');
    edCaminhoNome.SetFocus;
    exit;

  end;

   arq := TarqTXT.create();
   arq.criaArquivo(edCaminhoNome.Text+ '.txt');

   filtro := filtro + 'AND (LANCAMENTO.LANC_DATA >= ' + QuotedStr(FormatDateTime('mm/dd/yyyy 00:00:00', edDataIni.Date)) +' )';
   filtro := filtro + 'AND (LANCAMENTO.LANC_DATA <= ' + QuotedStr(FormatDateTime('mm/dd/yyyy 23:59:59', edDataFim.Date)) +' )';

   filtro := filtro + 'AND (LANCAMENTO.CODIGOEMPRESA = '+ IntToStr(DBLEmpresa.KeyValue) +' )';

   if RGIndicacao.ItemIndex = 1 then
   begin
     filtro := filtro + 'AND ( LANCAMENTO.LANC_CPCR = ''P'' )' ;
   end;

   if RGIndicacao.ItemIndex = 0 then
   begin
     filtro := filtro + 'AND ( LANCAMENTO.LANC_CPCR = ''R'' )';
   end;


   QPesquisa.Close;
   QPesquisa.SQl.Clear;
   QPesquisa.SQl.Add(SQL + Filtro);
   QPesquisa.Open;


   while not(QPesquisa.Eof) do
   begin

     pos_1    := copy(QPesquisa.FieldByName('LANC_CPCR').AsString + space2(1), 1, 1);
     pos_2    := FormatDateTime('DD/MM/YYYY',QPesquisa.FieldByName('LANC_DATA').AsDateTime);
     pos_3    := copy(QPesquisa.FieldByName('COD_BANCO_CAM_COM').AsString + space2(3), 1, 3);
     pos_4    := copy(QPesquisa.FieldByName('NUMERO_AGENCIA').AsString + space2(4), 1, 4);
     pos_5    := copy(QPesquisa.FieldByName('NUMERO_CONTA').AsString + space2(10), 1, 10);
     pos_6    := copy(QPesquisa.FieldByName('CONT_CORR_DESCRICAO').AsString + space2(30), 1, 30);


     if QPesquisa.FieldByName('LANC_CPCR').AsString = 'P'then
     begin
       pos_7    := copy(QPesquisa.FieldByName('CNPJ_FORNECEDOR').AsString + space2(14), 1, 14);
       pos_8    := copy(QPesquisa.FieldByName('RAZAO_FORNECEDOR').AsString + space2(40), 1, 40);

       pos_11   := copy(QPesquisa.FieldByName('CP_DOCUMENTO').AsString + space2(6), 1, 6);
     end else
     begin
       pos_7    := copy(QPesquisa.FieldByName('CPFCNPJ_CLIENTE').AsString + space2(14), 1, 14);
       pos_8    := copy(QPesquisa.FieldByName('RAZAO_CLIENTE').AsString + space2(40), 1, 40);

       pos_11   := copy(QPesquisa.FieldByName('CR_DOCUMENTO').AsString + space2(6), 1, 6);
     end;

       pos_9    := FormatFloat('#,##0.00', QPesquisa.FieldByName('LANC_VALORFINAL').AsFloat);
       pos_10   := FormatFloat('#,##0.00', QPesquisa.FieldByName('LANC_JUROSMULTA').AsFloat);

       pos_12   := copy(QPesquisa.FieldByName('LANC_CHEQUE').AsString + space2(6), 1, 6);
       pos_13   := copy(QPesquisa.FieldByName('DESCRICAO').AsString + space2(30), 1, 30);


        arq.adicionaLinha(pos_1    + ';' +
                          pos_2    + ';' +
                          pos_3    + ';' +
                          pos_4    + ';' +
                          pos_5    + ';' +
                          pos_6    + ';' +
                          pos_7    + ';' +
                          pos_8    + ';' +
                          pos_9    + ';' +
                          pos_10   + ';' +
                          pos_11   + ';' +
                          pos_12   + ';' +
                          pos_13 + ';');


     QPesquisa.Next;
   end;
   arq.fechaArquivo;

   inherited;

   ShowMessage('Arquivo gerado com sucesso.');

end;

procedure TFRotinaLancamentosDisque.DBLEmpresaKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  inherited;
  if key = vk_f5 then begin

    TDBLookupComboBox(sender).ListSource.DataSet.Close;

    TDBLookupComboBox(sender).ListSource.DataSet.Open;
    exit;

  end;

  if key = vk_delete then begin

    TDBLookupComboBox(sender).KeyValue        := Null;
    TDBLookupComboBox(sender).Field.AsVariant := Null;
    exit;

  end;

end;

procedure TFRotinaLancamentosDisque.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  inherited;
  FRotinaLancamentosDisque.Release;
  FRotinaLancamentosDisque := nil;
end;

procedure TFRotinaLancamentosDisque.FormCreate(Sender: TObject);
begin
  inherited;
DsEmpresa.DataSet.Open;
end;

procedure TFRotinaLancamentosDisque.edCaminhoNomeButtonClick(
  Sender: TObject);
begin
  inherited;
  if savedialog.Execute then
    edCaminhoNome.Text := SaveDialog.FileName;

end;

end.
